<?php


namespace App\Http\Controllers\GarbageCollect;

use App\Models\Garbage\GarbageRetrieveOrder;
use App\Models\Garbage\GarbageRetrieveOrderPic;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Database\QueryException;
use Validator;
/**
 * @group 垃圾分类->垃圾周期管理->订单->大件回收订单
 *
 * 采用 restful api
 *
 * Body Parameters 表示请求的所需要的参数
 *
 * Query Parameters 表示返回参数的名称
 */
class GarbageRetrieveOrderController extends Controller
{

    /**
     * 信息展示
     * @queryParam no 订单编号
     * @queryParam user_id 订单用户id号
     * @queryParam price 回收价格
     * @queryParam address 回收地址
     * @queryParam status 状态 1待取货 2已取货 3.回收成功 4. 回收失败
     * @queryParam start_time 预约回收起始时间
     * @queryParam end_time 预约回收结束时间
     * @queryParam weight 回收物重量
     * @queryParam desc 备注信息
     * @queryParam is_retrieve 是否已取货
     * @queryParam name 用户预留名称
     * @queryParam phone 用户预留手机
     * @queryParam user->nickname 用户微信昵称
     * @queryParam user->openid 用户微信号
     * @queryParam kind->name 回收物品
     * @queryParam images 回收图片
     *
     * @bodyParam phone string optional 通过手机号筛选订单
     * @bodyParam card string optional 通过会员卡号筛选订单
     */
    public function index(Request $request){
        $query = GarbageRetrieveOrder::with('kind')->with('images')->with('user')->whereHas('user',function($q) use ($request){
            $request->has('card') && $q->where('card',"LIKE","%{$request->get('card')}%");
        })->where(function($q) use ($request) {
            $request->has('phone') && $q->where('phone','LIKE',"%{$request->get('phone')}%");
            }
        );
        return response()->json(encodeMsg(pageQuery($query,$request),200),200);
    }


    /**
     * 单个信息展示
     *
     * @queryParam no 订单编号
     * @queryParam user_id 订单用户id号
     * @queryParam price 回收价格
     * @queryParam address 回收地址
     * @queryParam status 状态 1待取货 2已取货 3.回收成功 4. 回收失败
     * @queryParam start_time 预约回收起始时间
     * @queryParam end_time 预约回收结束时间
     * @queryParam weight 回收物重量
     * @queryParam desc 备注信息
     * @queryParam is_retrieve 是否已取货
     * @queryParam name 用户预留名称
     * @queryParam phone 用户预留手机
     * @queryParam user->nickname 用户微信昵称
     * @queryParam user->openid 用户微信号
     * @queryParam kind->name 回收物品
     * @queryParam images 回收图片
     */
    public function show($pk)
    {
        $data = GarbageRetrieveOrder::with('user')->with('kind')->with('images')->find($pk);
        if ($data == []) {
            return response()->json(encodeMsg(["message" => "没有该订单信息"],404), 404);
        } else {
            return response()->json(encodeMsg($data,200), 200);
        }
    }

    /**
     * 信息更新
     *
     * @queryParam no 订单编号
     * @queryParam user_id 订单用户id号
     * @queryParam price 回收价格
     * @queryParam address 回收地址
     * @queryParam status 状态 1待取货 2已取货
     * @queryParam start_time 预约回收起始时间
     * @queryParam end_time 预约回收结束时间
     * @queryParam weight 回收物重量
     * @queryParam desc 备注信息
     * @queryParam is_retrieve 是否已取货
     * @queryParam name 用户预留名称
     * @queryParam phone 用户预留手机
     * @queryParam user->nickname 用户微信昵称
     * @queryParam user->openid 用户微信号
     * @queryParam kind->name 回收物品
     * @queryParam images 回收图片
     *
     * @bodyParam user_id int optional 订单用户信息
     * @bodyParam price float optional 回收价格
     * @bodyParam address string optional 回收地址
     * @bodyParam status int optional 状态 1待取货 2已取货 3.回收成功 4. 回收失败
     * @bodyParam start_time timestamp optional 预约回收起始时间
     * @bodyParam end_time timestamp optional 预约回收结束时间
     * @bodyParam weight float optional 回收物重量
     * @bodyParam desc string optional 备注信息
     * @bodyParam is_retrieve int optional 是否已取货(0,1)
     * @bodyParam files string optional 订单回收相关文件id串 如果只有一个文件 上传 1 如果多个 使用逗号隔开 1,2,3,4,5 特别注图片id必须是已经调用图片接口添加好了的
     * @bodyParam name string optional 用户预留名称
     * @bodyParam phone string optional 用户预留手机号
     *
     */
    public function update(Request $request, $pk){

        $e = genValidate();
        $validator = Validator::make($request->all(),$e);
        if($validator->fails()){
            return response()->json(encodeMsg($validator->errors()->messages(),400),400);
        }
        $data = GarbageRetrieveOrder::find($pk);
        if($data == []){
            return response()->json(encodeMsg(["message"=>"没有该订单信息"],404),404);
        }
        try {
            $post_data = $request->all();
            if($request->has('no'))
                unset($post_data['no']);
            $data->update($post_data);
            if($request->has('files')){
                $file_data = [];
                $fileArr = explode(',',$request->get('files'));
                foreach ($fileArr as $k=>$value){
                    $tmp = [];
                    $tmp['file_id'] = $value;
                    $tmp['order_id'] = $data->id;
                    array_push($file_data,$tmp);
                }
                try{
                    GarbageRetrieveOrderPic::insert($file_data);
                }catch (\Exception $e){
                    return response()->json(encodeMsg(["message" => "请先确认图片是否已经添加"],404), 404);
                }

            }
            return response()->json(encodeMsg($data,200), 200);
        }catch (QueryException $e){
            return response()->json(encodeMsg(["message"=>"添加失败"],500),500);
        }
    }

    /**
     * 信息删除
     */
    public function destroy($pk){
        $data = GarbageRetrieveOrder::find($pk);
        if($data == []){
            return response()->json(encodeMsg(["message"=>"没有该订单信息"],404),404);
        }
        $data->delete();
        return response()->json(encodeMsg(["message"=>"删除成功"],200),200);
    }
}